package componentes.mips;
// divide o barramento em rs, rt, rd ...
import componentes.basicos.Barramento;
import componentes.basicos.Palavra;
import componentes.basicos.Registrador;
import java.util.ArrayList;

/**
 * 
 * 
 * @author Gustavo Miguel, Cleisson Alves, Evandro Francisco, Lucas.
 */
public class DivideBarramento {
    
    // Atributos da Classe.
    private Palavra instrucao;
    private Registrador[] instrucoesDividas;
    private int id;
    /**
     * Método para enviar para o Barramento o Registrador.
     * @param registrador Registrador a ser enviado para o Barramento
     * @return Barramento com o conteudo do registrador
     */
    public Barramento enviaParaBarramento(Registrador registrador) {
        return new Barramento(registrador.getConteudo());
    }
    
    /** Metodos privados */
    private void divideInstrucao() {
        this.instrucoesDividas = new Registrador[5];
        String []registradores = new String[5];
        
        registradores[0] = this.instrucao.getPalavra().substring(0, 5);    // [26,31] Op
        registradores[1] = this.instrucao.getPalavra().substring(6, 10);   // [21,25] Rs
        registradores[2] = this.instrucao.getPalavra().substring(11, 15);   // [16,20] Rt
        registradores[3] = this.instrucao.getPalavra().substring(16, 20);   // [11,15] Rd
        registradores[4] = this.instrucao.getPalavra().substring(21, 25);   // [6,10] shamt
        registradores[5] = this.instrucao.getPalavra().substring(26, 31);   // [0,5] funct
        registradores[6] = this.instrucao.getPalavra().substring(16, 31);    // [0,15] end
        registradores[6] = this.instrucao.getPalavra().substring(6, 31);    // [0,26] end jump
        for(int i = 0; i < registradores.length; ++i) {
            
            int limite = 32 - registradores[i].length();
            
            for(int j = 0; j < limite; ++j) {
                registradores[i] = "0".concat(registradores[i]);
            }
            
            instrucoesDividas[i] = new Registrador(new Palavra(registradores[i]));
        }
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


    
} // Fim da classe